﻿<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>新闻</title> 
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<style type="text/css">
<!--
.title {
	font-size: 16px;
	text-align: center;
	clear: both;
	float: left;
	padding-top: 20px;
	padding-bottom: 20px;
	width: 100%;
	background-color: #6699CC;
}
.content {
	width: 700px;
	text-align: left;
	margin-top: 10px;
	margin-right: auto;
	margin-bottom: 10px;
	margin-left: auto;
}
-->
</style>
</head> 

<body>
<div>
	<div class="title">新闻抓取</div>
	<div style="clear:both"><hr /></div>
	<div class="content">
<?php

	/***************************
	 @name zf
	 @time 2014-02-19
	 @parameter url：网址
	 @func  获取新闻标题、时间、新闻url
	***************************/
	function Getnews($url)
	{
		 //$url = "http://tech.ifeng.com/roll/rtlist_20140218/1.shtml";//网址
		//print_r(Get_news($url,$count));
		$handle=fopen($url,"r");
		$newsarr=array();
		//排除非新闻类的标签
		while(!feof($handle)){
			$line=fgets($handle);
			$count=0;
			str_replace("<h4>","",$line,$count);//匹配新闻中的标签，进行排除
			if($count>0){
				$newsarr[]=$line;
			}
		}
		fclose($handle);
		$c=0;
		$res=array();
		//用正则匹配函数
		foreach($newsarr as $k=>$v){
			$ptr="/<li><h4>(.*)<\/h4><a href=\"(.*)\" target=\"_blank\">(.*)<\/a>/";//抓取正则表达式
			preg_match_all($ptr,$v,$str,PREG_SET_ORDER);//抓取匹配新闻
			//对新闻进行重新赋值数组
			if(isset($str)){
				$res[$c]=array();
				$res[$c][]=$str[0][1];
				$res[$c][]=$str[0][2];
				$res[$c][]=$str[0][3];
				$c=$c+1;
			}
		}
		return $res;
	}	
function GetNewsResource( &$array)
{	
	$recarr=array();
	$i=0;
     while($i<10)
	{
		$url=$array[$i][1];
		$handle=fopen($url,'r');	
		$recarr=array();
		while(!feof($handle))
			{
			$line=fgets($handle);
			$count=0;
			str_replace("ss02","",$line,$count);//匹配新闻中的标签，进行排除
				if($count>0)
				{
					$recarr[]=$line;
				}
			}
			fclose($handle);	
			$i++;
	 }
	 print_r($recarr);
			$rot=array();
			$j=0;
			//抓取新闻来源的标签和网址
		foreach($recarr as $k=>$v)
		{	
			$ptr="/<a href=\"(.*)\" itemprop=\"isBasedOnUrl\" target=\"_blank\" ref=\"nofollow\">(.*)<\/a>/";
			preg_match_all($ptr,$v,$str,PREG_SET_ORDER);
				if(isset($str))
					{
						$rot[$j]=array();
						$rot[$j][]=$str[0][1];
						$rot[$j][]=$str[0][2];
						$j++;
						print_r($rot);
					}
		}
			return $rot;
	}
	
	/***************************
	 @name zf
	 @time 2014-02-19
	 @parameter page:显示页数 totalnum:数据总量 numPerPage:每页显示数量
	 @func  翻页功能
	***************************/
	function  pagefunc($page,$totalnum,$numPerPage){
        //得到分页导航
	    $pagestr='';
		//如果不是第一页，则有首页导航
		if($page>1){
			$pagestr .= '<a href="index2.php?page=1 id="firstpage">首  页</a>&nbsp;&nbsp;';
		}else{
			$pagestr .= '首  页&nbsp;&nbsp;';
		}
		if ( $page == 1 ) {
			if ($totalnum > $numPerPage) {
				$pagestr .= '<a href="index2.php?page='.($page+1).'">下一页</a>&nbsp;&nbsp;';
			}
		}else if ( $page == ceil( $totalnum/$numPerPage ) ) {
			$pagestr .= '<a href="index2.php?page='.($page-1).'">上一页</a>&nbsp;&nbsp;';
		}else {
			$pagestr .= '<a href="index2.php?page='.($page+1).'">下一页</a>&nbsp;&nbsp;<a href="index2.php?page='.($page-1).'">上一页</a>&nbsp;&nbsp;';
		}
		//如果不是末页，则有末页导航
		if ( $page < ceil( $totalnum/$numPerPage ) ) {
			$pagestr .= '<a href="index2.php?page='.ceil( $totalnum/$numPerPage ).'">末  页</a>';
		}else {
			$pagestr .= '末  页';
		}
		$pagestr .= '&nbsp;&nbsp;共&nbsp;'.$totalnum.'&nbsp;条记录';
		return $pagestr;
	}
	/***************************
	* 例子:抓取新闻
    ***************************/
    $url = "http://tech.ifeng.com/roll/rtlist_20140218/1.shtml";//网址
    //抓取新闻
	$res=Getnews($url);
	$rot=GetNewsResource($res);
	print_r($rot);
	//得到分页导航
	//$pagestr='';
	$numPerPage=10;//每页显示数据条数
	$totalnum=count($res);//数据总条数
	$page=isset($_GET['page'])?$_GET['page']:1;//得到显示第几页
	$offset=($page-1)*$numPerPage;
    //获取翻页功能
	$pagestr=pagefunc($page,$totalnum,$numPerPage);

	echo '
		<table cellpadding="0" border="0" cellspacing="1" class="base_line" width="700">
		<tr style="font-weight:bold;text-align:center;">
			<td width="60">时间</td>
			<td width="200">新闻信息</td>
			<td width="80">操作</td>
		</tr>';
	//逐条显示新闻信息
	for($i=$offset;$i<$numPerPage*$page;$i++){
	  //print_r($res[$i]);
       echo '<tr><td style="text-align:center">'.$res[$i][0].'</td>';
	   echo '<td>'.$res[$i][2].'</td>';
	   echo '<td><a href="'.$res[$i][1].'" target="_blank">查看</a>  <a href="#">删除</a>  <a href="#">编辑</a></td></tr>';
	}
	echo '<tr><td colspan="100%">'.$pagestr.'<td><tr>';
    echo '</table>';
	
	
	//连接数据库模块
	//header('Content-type:text/html;charset=utf-8');
	$con=mysql_connect('localhost','root','');
	if(!$con)die('连接失败'.mysql_error());//连接数据库
	$sql='create database catch;';
	$create=mysql_query($sql,$con);//创建数据库
	if(!$create)die('创建失败'.mysql_error());
	$select=mysql_select_db('catch',$con);//选择数据库
	if(!$select)die('选择失败'.mysql_error());
	$sql="create table  catch_table(
					id integer not null auto_increment primary key comment '序号',
					time char(100) not null comment '时间',
					news varchar(200) not null comment '新闻',
					url varchar(100) not null comment '网址'
					)COMMENT ='信息表';";
	$table=mysql_query($sql,$con);//创建表
	if(!$table)die('创建表失败'.mysql_error());
	$i=0;
	while($i<$totalnum)//插入值
	{
		$a=&$res[$i][0];
		$b=&$res[$i][2];
		$c=&$res[$i][1];
		$sql="insert  into catch_table(time, news, url)values('$a', '$b ', '$c');";
		$insert=mysql_query($sql,$con);
		if(!$insert)
		{
			die('插入失败'.$i.mysql_error());
			break;
		}
		$i=$i+1;
	}
	mysql_close($con);
	
?> 

</div>
<div style="clear:both"><hr /></div>
</div>
</body> 
</html> 
